/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tmPHA;

import ants.*;
import java.awt.Point;
import java.util.Random;

/**
 *
 * @author uhgy3k
 */
public class Hormiga {
    public int tipo;
    /* 0=Exploradoras
     * 1=Guerreras
     * 2=Obreras
     */
    public int mod;
    public int id;
    public Point place;
    public Hormiga(int i, int t,int x, int y, int modo) {
        place=new Point();
        place.x=x;
        place.y=y;
        tipo = t;
        id = i;
        mod = modo;
        /*
        place.x=origin.x;
        place.y=origin.y;
        */
    }
    
    public int getMovePro(double[] algo){
        int num=0, elements=0;
        int redondo[]=new int[algo.length];
        for(int i=0;i<algo.length;i++){
            redondo[i]=(int)Math.rint(algo[i]);
            //System.out.print(redondo[i]+" ");
            elements+=redondo[i];
        }
        //System.out.println();
        double proba[]=new double[elements];
        int k=0;
        if(elements>k){
            for(int i=0;i<redondo[0];i++){
                proba[k]=algo[0];
                //System.out.print(proba[k]+" ");
                k++;
            }
        }
        //System.out.println();
        if(elements>k){
            for(int i=0;i<redondo[1];i++){
                proba[k]=algo[1];
                k++;
            }
        }
        if(elements>k){
            for(int i=0;i<redondo[2];i++){
                proba[k]=algo[2];
                k++;
            }
        }
        if(elements>k){
            for(int i=0;i<redondo[3];i++){
                proba[k]=algo[3];
                k++;
            }
        }
        if(elements>k){
            for(int i=0;i<redondo[4];i++){
                proba[k]=algo[4];
                k++;
            }
        }
        if(elements>k){
            for(int i=0;i<redondo[5];i++){
                proba[k]=algo[5];
                k++;
            }
        }
        if(elements>k){
            for(int i=0;i<redondo[6];i++){
                proba[k]=algo[6];
                k++;
            }
        }
        if(elements>k){
            for(int i=0;i<redondo[7];i++){
                proba[k]=algo[7];
                k++;
            }
        }if(elements>k){
            for(int i=0;i<redondo[8];i++){
                proba[k]=algo[8];
                k++;
            }
        }
        //System.out.println(algo[7]);
        
        int valor=(int)Math.round(Math.random()*(elements-1));
        int valor1=(int)Math.round(Math.random()*(algo.length-1));
        //System.out.println("Random "+valor);
        
        //System.out.println();
        if(elements>0){
            while(proba[valor]!=algo[valor1]){
                valor1=(int)Math.round(Math.random()*(algo.length-1));
            }
            num=valor1;
            /*for(int i=0;i<algo.length;i++){
                if(proba[valor]==algo[i]){
                    num=i;
                    break;
                }
            }*/
        }
        return num;
    }
    
    public int getMovimiento(Perspective p, Perspective_k p2) {
        double[][] valores=new double [3][3];
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                
            }
        }
        Random ran = new Random();
        int x;
        do {
            x = ran.nextInt(9);
        }while(p.tiles[(int)(x/3)][x%3].type == Constantes.obstaculo);
        return x;
    }
    /* tipos:
         * 0 - Guerrera
         * 1 - Exploradora
         * 2 - Trabajadora
         */
    public Environment setR(Environment old, Hormiga ant, Perspective p, Perspective_k p2) {
        Environment nueva= new Environment(old.getDim().x,old.getDim().y);
        int a=ant.place.x-1;
        int aa=ant.place.x+1;
        int b=ant.place.y-1;
        int bb=ant.place.y+1;
        int c=(old.mapSize.y*2)-1;
        int d=(old.mapSize.x*2)-1;
        
        if(a>0 && b>0){
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(a, b, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(a, b, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(a, b, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                }
                
            }
        }
        }if(a>0){
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(a, ant.place.y, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(a, ant.place.y, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(a, ant.place.y, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                }
                
            }
        }if(a>0 && bb<c){
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(a, bb, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(a, bb, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(a, bb, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }
                }
                
            }
        }if(b>0){
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(ant.place.x, b, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(ant.place.x, b, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(ant.place.x, b, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }
                }
                
            }
        }   
        }if(true){
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(ant.place.x, ant.place.y, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(ant.place.x, ant.place.y, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(ant.place.x, ant.place.y, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }
                }
                
            }
        }if(bb<c){
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(ant.place.x, bb, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(ant.place.x, bb, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(ant.place.x, bb, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }
                }
                
            }
        }if(aa<d && b>0){
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(aa, b, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(aa, b, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(aa, b, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }
                }
                
            }
        }if(aa<d){
             for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(aa, ant.place.y, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(aa, ant.place.y, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(aa, ant.place.y, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }
                }
                
            }
        }if(aa<d && bb<c){
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    if(ant.tipo==0){
                        nueva.setElement(aa, bb, getValueA(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==1){
                        nueva.setElement(aa, bb, getValueB(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }if(ant.tipo==2){
                        nueva.setElement(aa, bb, getValueC(p.tiles[i][j].food,p2.tiles[i][j].totAnt()));
                    }
                }
                
            }
        }
        
        return nueva;
    }
    
    public int getType(){
        return tipo;
    }
    public int getMod(){
        return mod;
    }
    public void setMod(int a){
        mod=a;
    }
    public int getX(){
        return place.x;
    }
    public int getY(){
        return place.y;
    }
    public void setX(int a){
        place.x+=a;
    }
    public void setY(int b){
        place.y+=b;
    }
    
    public double getValueA(Boolean food, int antsTot){
        double value=0;
        if(food=true){
            value=10;
        }
        double resta=11*antsTot;
        value=value+resta;
        return value;
    }
    
    public double getValueB(Boolean food, int antsTot){
        double value=0;
        if(food=true){
            value=100;
        }
        double resta=-10*antsTot;
        value=value+resta;
        return value;
    }
    
    public double getValueC(Boolean food, int antsTot){
        double value=0;
        if(food=true){
            value=100;
        }
        double resta=-0.5*antsTot;
        value=value+resta;
        return value;
    }
    
}